package proyectoX.src.municiones;

import java.awt.Point;
import java.awt.Rectangle;

import javax.swing.ImageIcon;

import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.armas.BombaCongelante;
import proyectoX.src.armas.Escudo;

/**
 * Municion creada por la BombaCongelante durante el juego.
 *
 */
public class MunicionCongelante extends MunicionX{

	protected BombaCongelante arma;
	protected long tiempoActivacionEscudo;
	protected static final int DURACION_ESCUDO = 3000;
	protected static final int DELAY = 1000;

	/**
	 * 
	 * Crea una municion que que estara asociada con el arma y nivel pasados por parametro.
	 * @param e Arma que crea la municion
	 * @param nivel Nivel Actual
	 */
	public MunicionCongelante(BombaCongelante e,Nivel nivel) {
		this(0, 0, e,nivel);
	}

	/**
	 * 
	 * Crea una municion en la posicion (posX,poxY). La municion estara asociada con el arma y nivel pasados por parametro.
	 * @param posX posicion con respecto al eje x
	 * @param posY posicion con respecto al eje y
	 * @param e  arma que crea la municion
	 * @param nivel Nivel Actual
	 */
	public MunicionCongelante(int posX, int posY, BombaCongelante e,Nivel nivel) {
		super(e,nivel,-4);
		this.arma = e;
		ImageIcon imagen = new ImageIcon(this.getClass().getResource("/proyectoX/sprites/disparo_congelante.gif"));
		this.setIcon(imagen);
		this.setVisible(true);
		this.setSize(imagen.getIconWidth(), imagen.getIconHeight());		
		this.setLocation(posX, posY);
		this.tiempoActivacionEscudo = System.currentTimeMillis();
	}


	/**
	 * Actualiza la posicion de la municion en el juego. Esto genera velocidad y movimiento de la misma durante la ejecucion del juego
	 */
	public void actualizarPosicion() {

		Point position = this.getLocation();
		position.translate(0,velocidad);
		this.setLocation(position);

		if (System.currentTimeMillis() - tiempoActivacionEscudo  >= DURACION_ESCUDO){
			arma.desactivar();
			nivel.DescongelarCongelarTodo();
		}
		else  {
			if (System.currentTimeMillis() - tiempoActivacionEscudo  >= DELAY) {
					nivel.CongelarTodo();		
					this.setVisible(false);
			}
		}
	}


	/**
	 * Retorna la superficie de la municion que permitira calcular intersecciones.
	 * @return Superficie de la municion
	 */
	public Rectangle getBounds() {	
		return new Rectangle(); //de tamaño 0 en el punto (0,0)
	}


	/**
	 * Retorna Verdadero si la municion coliciona con alguno otro objeto en el juego. Esta municion en particular no genera colision. 
	 *@return Siempre retorna falso
	 **/
	public boolean calcularColisiones() {		
		return false;
	}
}
